#ifndef _BSP_HUART_DUMP_H
#define _BSP_HUART_DUMP_H

#include "api_uart.h"
#include "sfr.h"

#if HUART_DUMP_AUDIO

#define dump_printf   my_printf

#define DUMP_HEAD_NUM       2               // 支持同时导出几路数据(目前PC端工具UartDump最大只支持接收两路)
#define HEAD_TAG            0x37365455      //UT67
#define HEAD_LEN            14              //sizeof(dump_head)
#define DUMP_DATA_LEN       WIRELESS_MIC_SAMPLES_SELECT*2*4
#define DUMP_BUF_LEN    (14 * (2 + 1) + DUMP_DATA_LEN)          //dump数据包长度

typedef struct _DUMP_HEAD {
    u32 tag;
    u32 pkt_cnt;
    u16 pkt_len;
    u16 crc;          //crc16
    u8  type;         //bit7 crc_en //bit[3:0]  file_idx
    u8  head_sum;
}PACKED dump_head;

typedef struct _DUMP_SPI_PROTOCOL {
    dump_head *head[DUMP_HEAD_NUM];
    u8 *head_buf;           //head buf (14byte)
    u8 *data_buf;           //data_buf = head_buf + sizeof(dump_head)
    u16 data_buf_len;       //not include head
    u16 tx_len;             //一次发送的长度
    void (*putbuf)(void* buf,u32 buf_len);
    void (*wait_put_finish)(void);
}dump_protocol;

typedef struct {
    u8  sample_rate;
    u8 tx_port;
    u8 rx_port;
    u32 baud_rate;
    u8 *buf;
    u16 buf_size;
    u8 isr_rx_en;
    u16 samples;

    audio_callback_t callback;
} huart_dump_cfg_t;

void dump_buf_init(u8 *buf, int buf_len, int file_toal,void (*putbuf)(void*buf,u32 len), void (*wait)(void));

void dump_putbuf(u8 *buf,  int buf_len, u8 file_idx);
void dump_test(void);
void huart_wait_txdone(void);
void huart_dump_audio_input(u8 *ptr, u32 samples, int ch_mode, void *params);
void huart_dump_audio_output_callback_set(audio_callback_t callback);
void huart_dump_init(u8 sample_rate, u16 samples);

#endif // HUART_DUMP

#endif
